package Gather.StreamExercise.StreamDome001;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Consumer;

/**
 * ClassName:StreamDome010
 * Package:Gather.StreamExercise
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/24-21:16
 * @Version:v1.0
 */
public class StreamDome010 {
    /*void forEach(Consumer action) 遍历
     * long count()  统计
     * toArray() 收集流中的数据放到数组
     * collect(Collector collector)  收集流中的数据,放到集合中*/
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1, "张无忌-15","张强-14",
                "张三丰-100", "张翠山-38", "张良-40", "王二麻子-37", "谢广坤-58");

        //void forEach(Consumer action) 遍历
        list1.stream().forEach(new Consumer<String>() {
            //Consumer的泛型：表示流中数据的类型
            //accept方法的形参s：依次表示流里面的每一个数据
            //方法体：对每一个数据的处理操作(打印)
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

        list1.stream().forEach(s-> System.out.println(s));


        //long count()  统计
        long count = list1.stream().count();
        System.out.println(count);

        //toArray() 收集流中的数据放到数组
        Object[] arr1 = list1.stream().toArray();
        System.out.println(Arrays.toString(arr1));


        //IntFunction的泛型：具体类型的数组
        //apply的形参：流中数据的个数,要跟数组的长度保持一致
        //apply的返回值：具体类型的数组
        //方法体：就是创建数组

        //toArray方法的参数的作用：负责创建一个指定类型的数组
        //toArray方法的底层,会依次得到流里面的每一个数据,并把数据放到数组当中
        //toArray方法的返回值：是一个装着流里面所有的数据数组
//        String[] arr = list1.stream().toArray(new IntFunction<String[]>() {
//            @Override
//            public String[] apply(int value) {
//                return new String[value];
//            }
//        });
//
//        System.out.println(Arrays.toString(arr));

        String[] arr = list1.stream().toArray(value -> new String[value]);
        System.out.println(Arrays.toString(arr));
    }
}
